#pragma once

// constants
#define KEY_128						128
#define AES_NUM_WORDS_IN_BLOCK		4
#define AES_GFMATH_TABLE_LENGTH		256
#define AES_EXPONENTIAL_BASE_03		0x03
#define AES_FIELD_VALUE_01			0x01
#define AES_EXPONENTIAL_BASE_02		2
#define AES_WORD_SIZE				4
#define NWORDS_AES_KEY_196			6
#define NWORDS_AES_KEY_128			4
#define AES_MAX_ROWS				4

// error codes
#define E_SUCCESS					 0
#define E_INVALID_ARGS				-1
#define E_FAILED					-2
#define E_NO_MEMORY					-3
#define E_NO_ELEMENT				-4
#define E_INVALID_STATE				-5


// types 
typedef unsigned char		byte;
typedef byte*				PKEY_STREAM;
typedef unsigned long		KEY_TOKEN;